package com.qqin.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.qqin.exeption.ServiceException;
import com.qqin.mapper.CheckMapper;
import com.qqin.mapper.GoodsMapper;
import com.qqin.pojo.Check;
import com.qqin.pojo.Goods;
import com.qqin.pojo.PageBean;
import com.qqin.service.CheckService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

//处理与“审核”相关的业务逻辑
@Service
public class CheckServiceImpl implements CheckService {
    //spring的注解，用于自动依赖注入
    @Autowired
    private CheckMapper checkMapper;
    @Autowired
    private GoodsMapper goodsMapper;

    //    启动分页功能，指定当前页码和每页显示的记录数。分页查询某个用户的所有审核记录。（当前的页码和每页显示的记录）
    @Override
    public PageBean page(Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);//启动分页插件（pom。xml)。

        List<Check> checks = checkMapper.selectAll();
        Page<Check> p = (Page<Check>) checks;

        return new PageBean(p.getTotal(), p.getResult());//包含总记录数和当前页的结果
    }

    //根据审核记录的ID查询单条审核记录。
    @Override
    public Check selectById(Integer checkId) {

        return checkMapper.selectById((checkId));//获取审核id
    }

    //根据用户ID查询与该用户相关的审核记录，并支持分页。
    @Override
    public PageBean selectByUser(Integer userId, Integer page, Integer pageSize) {
        PageHelper.startPage(page, pageSize);//启动分页功能。

        List<Goods> goods = checkMapper.selectByUser((userId));//根据用户ID查询与该用户相关的审核记录。
        Page<Goods> p = (Page<Goods>) goods;

        return new PageBean(p.getTotal(), p.getResult());
    }

    @Override
    public void changeState(Check check) {//根据审核记录的状态更新商品的状态。

        Integer goodsId = check.getCheckGoods();//获取审核几率的商品id
        Goods goods = goodsMapper.selectById(goodsId);//根据商品id查询商品信息（这里可以体现两张表之间的联系

        if (goods.getState() == 2) {
            throw new ServiceException("该商品已售，无需继续审核");
        }

        if (check.getState() == 1) {//如果审核状态为通过
            goodsMapper.sale(goodsId);//则更新商品状态为已售

        } else if (check.getState() == 2) {//如果审核状态为不通过，则下架
            goodsMapper.delisting(goodsId);
        }

        checkMapper.updateById(check);//更新审核记录的状态，确保所有的业务状态都能正确地反映在数据库中。
    }

}
